return {
  {
    "williamboman/mason-lspconfig.nvim",
    -- overrides `require("mason-lspconfig").setup(...)`
    opts = function(_, opts)
      -- add more things to the ensure_installed table protecting against community packs modifying it
      opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, {
        -- "lua_ls",
        "bashls",
        -- "ruff_lsp",
        "pyright",
        -- "pylsp",
        -- pip install python-lsp-ruff pyls-isort
        -- mannul install the two plugins
        "marksman",
        "jsonls",
      })
    end,
  },
  -- use mason-null-ls to configure Formatters/Linter installation for null-ls sources
  {
    "jay-babu/mason-null-ls.nvim",
    -- overrides `require("mason-null-ls").setup(...)`
    opts = function(_, opts)
      -- add more things to the ensure_installed table protecting against community packs modifying it
      opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, {
        "autopep8",
        "isort",
        -- "black",
        -- "stylua",
        -- "luacheck",
        "shfmt",
        "shellcheck",
        "markdown-toc",
      })
    end,
  },
  {
    "jose-elias-alvarez/null-ls.nvim",
    opts = function(_, config)
      -- config variable is the default configuration table for the setup function call
      local null_ls = require "null-ls"

      -- Check supported formatters and linters
      -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting
      -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
      config.sources = {
        null_ls.builtins.formatting.autopep8.with { extra_args = { "--max-line-length", "120", "--ignore", "E701" } },
        null_ls.builtins.formatting.isort.with {
          extra_args = {
            "--case-sensitive",
            "--multi-line",
            "9",
            "--ls",
            "--treat-all-comment-as-code",
          },
        },
        -- Set a formatter
        -- null_ls.builtins.formatting.stylua,
        -- null_ls.builtins.formatting.markdown-toc,
      }
      return config -- return final config table
    end,
  },
  {
    "jay-babu/mason-nvim-dap.nvim",
    -- overrides `require("mason-nvim-dap").setup(...)`
    opts = function(_, opts)
      -- add more things to the ensure_installed table protecting against community packs modifying it
      opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, {
        -- "python",
      })
    end,
  },
  {
    "nvim-treesitter/nvim-treesitter",
    opts = function(_, opts)
      -- add more things to the ensure_installed table protecting against community packs modifying it
      opts.highlight = {
        enable = true,
        additional_vim_regex_highlighting = { "markdown" },
      }
      opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, {
        "c",
        "lua",
        "luadoc",
        "luap",
        "javascript",
        "json",
        "jsonc",
        "json5",
        "jsdoc",
        "python",
        "ninja",
        "markdown",
        "markdown_inline",
        "regex",
        "tsx",
        "typescript",
        "bash",
        "html",
        "git_config",
        "requirements",
        "ruby",
        "gitignore",
        "git_rebase",
        "gitattributes",
        "gitcommit",
        "java",
        "cmake",
        "dockerfile",
        "http",
        "latex",
        "query",
        "norg",
        "perl",
        "php",
        "rust",
        "go",
        "toml",
        "yaml",
        "sql",
      })
    end,
  },
}
